package com.javasm.util;

import com.javasm.entity.JINXIAOEntity.Fitting;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.springframework.stereotype.Component;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

//基于FreeMarker（模板引擎），：用于生成HTML页面，源代码等，是一种基于模板改变数据生成文本的工具。
@Component
public class WordUtil {

//   模板生成Word基本思路
//	1.先编辑模板，这是最重要的，编辑docx，另存为xml
//	2.模板中可以有list，判断，map等
//	3.Java中拼装数据，存入map
//	4.Map中的key，是xml模板中需要读取的变量
//	5.模板路径和名称设置正确
//	6.设置好编码执行写入
//
    public static void createWord(String templateName, Object data, OutputStream out) throws Exception {
        Configuration config = new Configuration(Configuration.VERSION_2_3_28);// 指定版本
        config.setDefaultEncoding("UTF-8");
        config.setClassLoaderForTemplateLoading(WordUtil.class.getClassLoader(),"/templates");// 加载指定模板路径
        Template template = config.getTemplate(templateName); // 获取模板名称
        Writer fileWriter = new OutputStreamWriter(out,"UTF-8");// 用于将字符数据写入到一个输出流中，并指定字符编码为 UTF-8
        template.process(data,fileWriter);
        fileWriter.close();
    }

    public static void main(String[] args) throws Exception{
        //封装合同数据
        Map<String,Object> data = new HashMap<>();
        data.put("Lessor","孙冰"); //出租方
        data.put("Lessee","高新"); //承租方
        data.put("IDcard","4101231231232103230423423"); //身份证号
        data.put("hireMonthPrice","4555.0"); // 月租金
        data.put("hireDate","2022-6-23"); // 租赁日期
        List<Fitting> fittings = new ArrayList<>(); // 家具清单明细
        fittings.add(new Fitting("空调",3,3100.0));
        fittings.add(new Fitting("洗衣机",1,3300.0));
        fittings.add(new Fitting("85寸智能电视机",1,9300.0));
        data.put("FitList",fittings);
        //创建一个 FileOutputStream 对象，以便写入数据到一个指定的文件路径
        OutputStream out = new FileOutputStream("D:\\dev\\ftmarket\\src\\main\\resources\\templates\\upload\\租赁合同(新).docx");

        WordUtil.createWord("租赁合同.xml",data,out);
    }

}
